// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_DISPLAY_CHROMEOS_DISPLAY_LAYOUT_MANAGER_H_
#define UI_DISPLAY_CHROMEOS_DISPLAY_LAYOUT_MANAGER_H_

#include <vector>

#include "third_party/cros_system_api/dbus/service_constants.h"
#include "ui/display/chromeos/display_configurator.h"
#include "ui/display/types/display_constants.h"

namespace ui {

struct DisplayConfigureRequest;
class DisplaySnapshot;

class DisplayLayoutManager {
public:
    virtual ~DisplayLayoutManager() { }

    virtual DisplayConfigurator::SoftwareMirroringController*
    GetSoftwareMirroringController() const = 0;

    virtual DisplayConfigurator::StateController* GetStateController() const = 0;

    // Returns the current display state.
    virtual MultipleDisplayState GetDisplayState() const = 0;

    // Returns the current power state.
    virtual chromeos::DisplayPowerState GetPowerState() const = 0;

    // Based on the given |displays|, display state and power state, it will
    // create display configuration requests which will then be used to
    // configure the hardware. The requested configuration is stored in
    // |requests| and |framebuffer_size|.
    virtual bool GetDisplayLayout(const std::vector<DisplaySnapshot*>& displays,
        MultipleDisplayState new_display_state,
        chromeos::DisplayPowerState new_power_state,
        std::vector<DisplayConfigureRequest>* requests,
        gfx::Size* framebuffer_size) const = 0;

    virtual std::vector<DisplaySnapshot*> GetDisplayStates() const = 0;

    virtual bool IsMirroring() const = 0;
};

} // namespace ui

#endif // UI_DISPLAY_CHROMEOS_DISPLAY_LAYOUT_MANAGER_H_
